package br.com.serctam.session;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.commons.lang3.StringUtils;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;
import org.jboss.seam.persistence.HibernateSessionProxy;

import br.com.serctam.entity.Cidade;
import br.com.serctam.entity.UF;


@Stateful
@Name("cidadeList")
@Scope(ScopeType.CONVERSATION)
public class CidadeListBean implements CidadeList{


    @Logger private Log log;

    @In StatusMessages statusMessages;
    
    @PersistenceContext
    private EntityManager entityManager;
    
    @In
    private HibernateSessionProxy hibernateSession;
    
    @Out(required=false , scope=ScopeType.CONVERSATION)
    private UF uf;
    
    @Out(required=false , scope=ScopeType.CONVERSATION)
    private List<UF> ufs;
    
    @Out(required=false , scope=ScopeType.CONVERSATION)
    private List<Cidade> cidades;

	

    @Factory("ufs")
	public List<UF> buscaUfs() {
        ufs = entityManager.createQuery(" select uf from UF uf " ).getResultList();
        return ufs;
	}

    public void buscaCidade(String sigla) {

    	log.info("Local Sigla: " + sigla);
    	if(uf != null)log.info("UF : " + uf.getSigla() + " - "  + uf.getNome());
    	
    	if(StringUtils.isNotBlank(sigla)){
    		cidades = entityManager.createQuery(" select new Cidade(c.id, c.version, c.nome, c.siglaUf, c.uf.id, c.uf.nome, c.uf.sigla ) from Cidade c inner join c.uf uf where sigla_uf =  '" + sigla.toUpperCase()+ "'" ).getResultList();
    	} else {
    		
    		if(uf != null && StringUtils.isNotBlank(uf.getSigla())){
    			sigla = uf.getSigla();
        		cidades = entityManager.createQuery(" select new Cidade(c.id, c.version, c.nome, c.siglaUf, c.uf.id, c.uf.nome, c.uf.sigla ) from Cidade c inner join c.uf uf where sigla_uf =  '" + sigla.toUpperCase()+ "'" ).getResultList();
    		}
    		
    		cidades = new ArrayList<Cidade>(0);
    	}
    	
    }
    
    @Factory("cidades")
    public void buscaCidade(){
    	buscaCidade(uf);
    	
    }
    
	public void buscaCidade(UF uf) {
		if (uf != null && uf.getSigla() != null){
			buscaCidade(uf.getSigla());
		}
	}


	public void buscaCidade(Long idUf) {
		// TODO Auto-generated method stub
		
	}

	@Destroy
	@Remove
	public void destroy() {
	}

	public List<UF> getUfs() {
		return ufs;
	}

	public void setUfs(List<UF> ufs) {
		this.ufs = ufs;
	}

	public List<Cidade> getCidades() {
		return cidades;
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public UF getUf() {
		return uf;
	}

	public void setUf(UF uf) {
		this.uf = uf;
	}
	
}
